package com.qwz.dynamics;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * @author Qiuwuzhi
 * @version V1.0
 * @Description: 动态代理实现
 * @Package com.qwz.dynamics.DynamicsProxy
 * @date 2019/12/23 13:18
 */
public class DynamicsProxy implements InvocationHandler {
    /**
     * 被代理的对象
     */
    private OrderApi order;

    /**
     * 获取绑定好代理和具体目标对象后的目标对象接口
     *
     * @param order
     * @return
     */
    public OrderApi getProxyinterface(Order order) {
        //设置被代理对象，方便invoke里面操作
        this.order = order;
        //把真正的订单对象和动态代理关联起来
        OrderApi orderApi = (OrderApi) Proxy.newProxyInstance(order.getClass().getClassLoader(),
                order.getClass().getInterfaces(), this);
        return orderApi;
    }

    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        if (method.getName().startsWith("set")) {
            if (order.getOrderUser() == null || !order.getOrderUser().equals(args[1])) {
                System.out.println("对不起，" + args[1] + "无权修改本订单的数据");
            }
        }
        return method.invoke(order, args);
    }
}
